
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
	<meta name="renderer" content="webkit"> 
    <title><%=siteName + ' - ' + siteAbout%></title>
    <link rel="icon" type="image/icon" href="<%=siteIcon%>">
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
</head>
<body>
    <% include header.html %>
    <div id="doc-container">
        <div id="doc-bg"></div>
        <div id="doc-area">
            <h3>什么是F2etest WebDriver云？</h3>
            <p>WebDriver是解决自动化测试的一个W3C标准解决方案：<a href="https://www.w3.org/TR/webdriver/" target="blank">https://www.w3.org/TR/webdriver/</a></p>
            <p>那么，什么是F2etest WebDriver云？</p>
            <p>F2etest WebDriver云是在WebDriver方案基础上，实现的一套WebDriver Hub解决方案，可以对外提供并调度海量的执行机节点，并提供了以下功能扩展：</p>
            <ol>
                <li><strong>10倍以上硬件利用率</strong>：传统WebDriver 1台执行机仅能跑1个Job，而我们一台机器可以高并发跑N个Job，这个N取决于机器配置，理论上硬件利用率相当于传统节点的10倍以上</li>
                <li><strong>支持独立hosts绑定</strong>：每次申请节点时，可以指定不同的hosts绑定，保证同一台机器上不同节点的Job不会相互干扰</li>
            </ol>
            <h3>我如何使用？</h3>
            <p>我们使用标准的WebDriver协议，所有支持WebDriver协议的客户端，都可以直接使用。</p>
            <p>F2etest WebDriver Hub连接信息：</p>
            <ol>
                <li>host: <strong><%=hostname%></strong></li>
                <li>port: <strong>4444</strong></li>
            </ol>
            <p>初始化时提交的扩展参数：</p>
            <ol>
                <li>f2etest.userid: <strong><%=userid%></strong></li>
                <li>f2etest.apiKey: <strong><%=apiKey%></strong></li>
                <li>f2etest.hosts: hosts绑定 (可选)</li>
            </ol>
            <p>详细使用，请参考我们NodeJs的示例：<a href="/wd_nodejs">jWebDriver使用示例</a></p>
            <h3>节点参数需知：</h3>
            <ol>
                <li>WebDriver闲置超时：<strong>60秒</strong>(任务会话意外中断，60秒后会自动结束，如果希望增加调试时间，请定时发起一次任意操作，以延后回收时间)</li>
                <li>节点回收轮询：<strong>5秒</strong>(节点会话结束后，5秒内会被重新放入执行机池)</li>
            </ol>
            <h3 id="wdListTitle">WebDriver浏览器列表(2秒刷新), 空闲(<span id="idleCount">0</span>)，工作(<span id="busyCount">0</span>)，离线(<span id="offlineCount">0</span>)：</h3>
            <div id="wdBrowserList">
            </div>
            <script type="text/javascript">
                var jWdBrowserList = $('#wdBrowserList');
                var jOfflineCount = $('#offlineCount');
                var jIdleCount = $('#idleCount');
                var jBusyCount = $('#busyCount');
                function refreshWdBrowserList(){
                    $.getJSON('/listWdBrowsers?callback=?', function(data){
                        var arrHtml = [];
                        var offlineCount = 0;
                        var idleCount = 0;
                        var busyCount = 0;
                        var arrBrowsers = data.arrBrowsers;
                        arrBrowsers.forEach(function(browser){
                            var browserName = browser.browserName;
                            var appId = browserName.toLowerCase();
                            var browserVersion = browser.browserVersion;
                            if(browserVersion){
                                browserName += ' ' + browserVersion;
                                if(appId === 'ie')appId += browserVersion;
                            }
                            var arrLine = ['<div class="browserLine"><span class="name">'+browserName+':</span><div class="browser">'];
                            var workStatus = browser.workStatus;
                            var arrNodes = workStatus.split(',');
                            arrNodes.sort(function(a, b){
                                var arrA = a.split(':');
                                var arrB = b.split(':');
                                var idA = parseInt(arrA[0],10);
                                var idB = parseInt(arrB[0],10);
                                if(idA > idB){
                                    return 1;
                                }
                                else if(idA < idB){
                                    return -1;
                                }
                                else{
                                    return 0;
                                }
                            });
                            arrNodes.forEach(function(browserInfo){
                                var arrBrowserInfo = browserInfo.split(':');
                                var browserId = arrBrowserInfo[0];
                                var status = arrBrowserInfo[1];
                                switch(status){
                                    case '0':
                                        offlineCount ++;
                                        break;
                                    case '1':
                                        idleCount ++;
                                        break;
                                    case '2':
                                        busyCount ++;
                                        break;
                                }
                                var mapClass = {
                                    0: 'offline',
                                    1: 'idle',
                                    2: 'run'
                                };
                                var mapTitle = {
                                    0: '歇菜了……',
                                    1: '休息中……',
                                    2: '玩命工作中……'
                                }
                                arrLine.push('<span class="'+mapClass[status]+'" title="'+mapTitle[status]+'"><span></span><img src="/imgs/app/'+appId+'.png"></span> ');
                            });
                            arrLine.push('</div></div>')
                            arrHtml.push(arrLine.join(''));
                        });
                        jWdBrowserList.html(arrHtml.join(''));
                        jOfflineCount.html(offlineCount);
                        jIdleCount.html(idleCount);
                        jBusyCount.html(busyCount);
                        setTimeout(refreshWdBrowserList, 2000);
                    });
                }
                refreshWdBrowserList();
            </script>
        </div>
    </div>
    <% include footer.html %>
</body>
</html>
